{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "导入一些用到的库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "tf.logging.set_verbosity(tf.logging.INFO)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "查看训练数据集、验证数据集及测试数据集等数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting ./train-images-idx3-ubyte.gz\n",
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "(55000, 784)\n",
      "(55000,)\n",
      "(5000, 784)\n",
      "(5000,)\n",
      "(10000, 784)\n",
      "(10000,)\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets(\"./\")\n",
    "\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "images里面有数量不等的图片，每张图片是28x28长度的一个一维向量， 所以用的时候需要先给它还原成28x28的二维图片。labels中则是图片对应的数字的值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f7c44c038d0>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4,4, idx+1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(mnist.train.labels[idx]))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "定义用于训练的网络，首先定义网络的输入。\n",
    "\n",
    "这里我们直接使用上面的数据作为输入，所以定义两个placeholder分别用于图像和lable数据，另外，定义一个float类型的变量用于设置学习率。\n",
    "为了让网络更高效的运行，多个数据会被组织成一个batch送入网络，两个placeholder的第一个维度就是batchsize，因为我们这里还没有确定batchsize，所以第一个维度留空。\n",
    "\n",
    "模型结构：模型为两层的全链接神经网络。输入为784向量，输出为10维向量，有一个有包括100个神经元的隐层，使用Relu激活函数对第一层输出进行激活作为第二层的输入，第二层为输出层。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = tf.placeholder(\"float\", [None, 784])\n",
    "y = tf.placeholder(\"int64\", [None])\n",
    "learning_rate = tf.placeholder(\"float\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "def initialize(shape, stddev=0.1):\n",
    "  return tf.truncated_normal(shape, stddev=0.1)\n",
    "\n",
    "L1_units_count = 100\n",
    "\n",
    "W_1 = tf.Variable(initialize([784, L1_units_count]))\n",
    "b_1 = tf.Variable(initialize([L1_units_count]))\n",
    "logits_1 = tf.matmul(x, W_1) + b_1\n",
    "output_1 = tf.nn.relu(logits_1)\n",
    "\n",
    "L2_units_count = 10 \n",
    "W_2 = tf.Variable(initialize([L1_units_count, L2_units_count]))\n",
    "b_2 = tf.Variable(initialize([L2_units_count]))\n",
    "logits_2 = tf.matmul(output_1, W_2) + b_2  \n",
    "\n",
    "logits = logits_2\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "定义loss和用于优化网络的优化器。loss计算使用了sparse_softmax_cross_entropy_with_logits, 这样做的好处是labels可以不用手动做one_hot省了一些麻烦。这里使用了sgd优化器，学习率为可以根据需要设定。\n",
    "\n",
    "对模型训练过程（梯度如何计算，参数如何更新）：采用SGD优化算法，使用交叉熵损失函数，通过比较输出logits和标签y,对参与计算的w进行调整，从输出层开始，向输入层方向逐层计算梯度并更新权重，每次使用32条数据计算梯度，更新权重，训练1000次。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y))\n",
    "\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=learning_rate).minimize(cross_entropy_loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "输出的是未经softmax的原始logits，而不是概率分布， 要想看到概率分布，还需要做一下softmax。将输出的结果与正确结果进行对比，即可得到我们的网络输出结果的准确率。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "pred = tf.nn.softmax(logits)\n",
    "correct_pred = tf.equal(tf.argmax(pred, 1), y)\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "saver用于保存或恢复训练的模型。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size = 32\n",
    "trainig_step = 1000\n",
    "\n",
    "saver = tf.train.Saver()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "计算图的理解：计算图描述了计算的过程，TensorFlow使用图来表示计算任务。 Tensorflow是一种计算图模型，即用图的形式来表示运算过程的一种模型。Tensorflow程序一般分为图的构建和图的执行两个阶段。构建阶段，也称为图的定义阶段，在构建阶段op的执行步骤被描述成一个图，每次运算的的结果以及原始的输入数据都可称为一个节点（operation ，缩写为op）。在执行阶段，使用会话执行图中的op。\n",
    "\n",
    "以上定义的所有操作，均为计算图，也就是仅仅是定义了网络的结构，实际需要运行的话，还需要创建一个session，并将数据填入网络中。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 training steps, the loss is 0.459162, the validation accuracy is 0.8772\n",
      "after 200 training steps, the loss is 0.287612, the validation accuracy is 0.9104\n",
      "after 300 training steps, the loss is 0.175274, the validation accuracy is 0.9142\n",
      "after 400 training steps, the loss is 0.375353, the validation accuracy is 0.9306\n",
      "after 500 training steps, the loss is 0.27749, the validation accuracy is 0.919\n",
      "after 600 training steps, the loss is 0.152648, the validation accuracy is 0.933\n",
      "WARNING:tensorflow:From /home/wku1/.local/lib/python3.6/site-packages/tensorflow/python/training/saver.py:960: remove_checkpoint (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to delete files with this prefix.\n",
      "after 700 training steps, the loss is 0.382174, the validation accuracy is 0.94\n",
      "after 800 training steps, the loss is 0.0496147, the validation accuracy is 0.9474\n",
      "after 900 training steps, the loss is 0.158633, the validation accuracy is 0.9582\n",
      "the training is finish!\n",
      "the test accuarcy is: 0.9507\n"
     ]
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "\n",
    "    #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "    }\n",
    "    test_data = {x: mnist.test.images, y: mnist.test.labels}\n",
    "\n",
    "    for i in range(trainig_step):\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss = sess.run(\n",
    "            [optimizer, cross_entropy_loss],\n",
    "            feed_dict={\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                learning_rate: 0.3\n",
    "            })\n",
    "\n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if i > 0 and i % 100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\n",
    "                \"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                % (i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "\n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuarcy is:\", acc)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "用训练的模型做测试。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-900\n",
      "0.9375\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f7c418ccf28>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict={\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16]\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(mnist.test.labels[idx],\n",
    "                                                  order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "解释这⾥的模型为什么效果⽐较差？\n",
    "模型层数据少，神经元个数少，未加正则项，参数初始化是随机的"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
